package com.leecode.xiehf.page_02;

import com.leecode.Printer;

/**
 * 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除所有重复的元素，使每个元素 只出现一次 。
 *
 * 返回同样按升序排列的结果链表。
 * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
 */
public class Solution_0083 extends Printer {

    public static void main(String[] args) {
        Solution_0083 solution = new Solution_0083();
        ListNode first =
//                new ListNode(2, new ListNode(4, new ListNode(3, null)));
                new ListNode(1, new ListNode(2, new ListNode(8, new ListNode(9, new ListNode(9, new ListNode(10, new ListNode(11, null)))))));

        ListNode s = solution.deleteDuplicates(first);
        while (s != null) {
            System.out.println(s.val);
            s = s.next;
        }
    }

    public static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    public ListNode deleteDuplicates(ListNode head) {
        // 当前节点值
        ListNode curr = head;
        // 暂存之前的值
        Integer top = null;
        // 统计之前的值出现几次
        int count = 0;
        // 新的链表
        ListNode res = new ListNode(-1);
        // 链表当前指针
        ListNode next = res;
        while (curr != null) {
            if (top == null) {
                // 一开始
                top = curr.val;
                // 加入节点
                next.next = new ListNode(top);
                // 当前指针指向下一个
                next = next.next;
            } else {
                // 如果相等 继续挂起
                if (top == curr.val) {
                    count++;
                } else {
                    // 加入节点
                    next.next = new ListNode(curr.val);
                    // 当前指针指向下一个
                    next = next.next;
                    // 只要不相等就需要重新指向新的挂起的值
                    top = curr.val;
                    count = 0;
                }
            }
            curr = curr.next;
        }
        return res.next;
    }


}
